#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include "cola.h"
int main()
{
	key_t llave;
	int idcola;
	tipo_mensaje mensaje;
	llave=ftok(".",'c');
	pid_t hijo=0;
	int tiempo_espera=0;
	int max_tiempo_espera=4;
	if (llave<0)
	{
		perror("Error al obtener la llave \n");
		exit(EXIT_FAILURE);
	}
	else
	{
		printf("Se ha obtenido la llave de acceso a la cola de mensajes: %d \n",llave);
		idcola=msgget(llave,0600);
		if (idcola<0) 
		{
			perror("Error al obtener el identificador de cola \n");
			exit(EXIT_FAILURE);
		}
		else
		{
			printf("Se ha obtenido el identificador de cola %d \n",idcola);
			while ( msgrcv(idcola,(struct msgbuf *)&mensaje,sizeof(mensaje)-sizeof(long),1,0)!=-1)
			{
				if(hijo=fork())
				{
				srand(getpid());
				tiempo_espera=rand()%max_tiempo_espera;
				printf("Hijo %d->espera %d segundos ",getpid(),(int)tiempo_espera);
				printf("|| Mensaje recibido: Tipo: %d PID Cliente: %d Numero: %d\n",(int)mensaje.id_mensaje,mensaje.cliente,mensaje.numero);
				sleep(tiempo_espera);
				printf("Hijo %d->fin espera ",getpid(),(int)tiempo_espera);
				printf("|| Mensaje recibido: Tipo: %d PID Cliente: %d Numero: %d\n",(int)mensaje.id_mensaje,mensaje.cliente,mensaje.numero);
				exit(0);
				}
			}
		}
	}

}
